Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Изменяется изначальная сортировка массива. (Markus, оценка: 1)
Author Message
Markus
Участник форума



Joined: 02 Feb 2004
Posts: 210
Карма: 3
   поощрить/наказать


PostPosted: Thu Jul 15, 2010 5:44 am (написано за 4 минуты 46 секунд)
   Post subject: Изменяется изначальная сортировка массива.
Reply with quote

Доброго времени суток.
Не могу понять где проблема. Есть форма с двумя селектами, в зависимости от выбора в первом селекте через JsHttpRequest подгружаю одномерный массив вида ID=>значение. Бекенд вытаскивает этот массив из мускула предварительно отсортировав данные. Но при передаче обратно в JsHttpRequest массив непонятным образом меняет сортировку, хотя связь ключей и значений сохраняется. Перерыл все, уже и в responseText выкидывал массив из бекенда, видно что там правильная сортировка а в responseJS уже массив неверно отсортирован.
Подскажите в каком направлении копать!
Back to top
View user's profile Send private message
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Thu Jul 15, 2010 6:43 am (спустя 58 минут; написано за 40 секунд)
   Post subject:
Reply with quote

Markus,
сейчас посмотрим сорцы библиотеки...
Back to top
View user's profile Send private message Send e-mail
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Thu Jul 15, 2010 6:50 am (спустя 7 минут; написано за 3 минуты 5 секунд)
   Post subject:
Reply with quote

Так, ну копать нужно в сторону метода php2js.

Выполните такой код у себя на сервере:
Code (php): скопировать код в буфер обмена
<?php
if ( function_exists (www.php.net/function_exists)('json_encode') )
{
         echo (www.php.net/echo) 'json extension OK!';
}
?>
Если скрипт ничего не выведет, значит библиотека использует на вашем сервере внутренний метод php2js,
возможно он служит причиной "сбития" сортировки.

Выложите сюда результат и пойдем дальше. (-:
Back to top
View user's profile Send private message Send e-mail
Markus
Участник форума



Joined: 02 Feb 2004
Posts: 210
Карма: 3
   поощрить/наказать


PostPosted: Thu Jul 15, 2010 11:11 am (спустя 4 часа 20 минут; написано за 39 секунд)
   Post subject:
Reply with quote

Здравствуйте.
Вывело json extension OK!
Но вроде в библиотеке в методе php2js нет ничего такого что бы сбивало сортировку.
Back to top
View user's profile Send private message
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Thu Jul 15, 2010 12:57 pm (спустя 1 час 46 минут; написано за 4 минуты 33 секунды)
   Post subject:
Reply with quote

Markus,
ну это только предположение, я тоже проанализировал код метода, и ничего такого не нашел. (-:
Вы можете привести минимальный рабочий код, который демонстрирует проблему? (Желательно без работы с базой.)

Кстати, раз уж у вас есть на сервере функция json_encode, то нужно проверить, не имеет ли она такого "неприятного" свойства.

Установите себе браузер Firefox и плагин FireBug и посмотрите какой ответ возвращает бакенд. Скопируйте его сюда.
Если ответ уже содержит "рассортированный" массив - будем смотреть его, если нет - будем фронтенд смотреть.
А то так можно гадать дооолго... (-:

Кстати, там условия для того чтобы функция json_encode использовалась дополнительные есть, поэтому давайте еще вот так подстрахуемся:
Откройте у себя код файла JsHttpRequest.php, найдите строки и измените:
Code (php): скопировать код в буфер обмена
if ($text === null) {
            $text = $this->php2js($result);
         logger('   php2js,  : ' . $text);
потом строку:
Code (php): скопировать код в буфер обмена
$text = json_encode($resultUtf8);
logger('Используется функция json_encode, получен результат: ' . $text);
Ну функцию logger, думаю понятно, нужно самому написать, пусть например в файл сбрасывает.
Потом покажите, что в файле будет.

Выясним, какую все таки из функций использует библиотека и нарушается ли на этом этапе порядок элементов.
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Thu Jul 15, 2010 8:31 pm (спустя 7 часов 33 минуты; написано за 42 секунды)
   Post subject:
Reply with quote

Markus
Есть такая проблема в опере — если Вы передаете ей массив с ключами типа int не по порядку, то она за Вас отсортирует обратно :). Поэтому пользуйтесь array_values... Хотя, возможно, Вы нарвались на какой-то другой баг
Back to top
View user's profile Send private message Send e-mail
Markus
Участник форума



Joined: 02 Feb 2004
Posts: 210
Карма: 3
   поощрить/наказать


PostPosted: Mon Jul 19, 2010 4:24 am (спустя 3 дня 7 часов 52 минуты; написано за 3 минуты 25 секунд)
   Post subject:
Reply with quote

Александр Михалицын
Проверено используется именно json_encode. И она явно не причем.
Как написал Юрий Насретдинов, это действительно баг Opera. В мозиле все нормально
Только как теперь это исправлять?
У меня действительно на выходе массив int=>value. В данной ситуации вижу только один выход, передавать фронтенду хешь с ключами по порядку типа
[key, value],[key1, value1],
Back to top
View user's profile Send private message
Markus
Участник форума



Joined: 02 Feb 2004
Posts: 210
Карма: 3
   поощрить/наказать


PostPosted: Mon Jul 19, 2010 4:30 am (спустя 6 минут; написано за 1 минуту 5 секунд)
   Post subject:
Reply with quote

Так и есть! Библиотека не причем. Это глюк Opera. Передал массив в измененном виде и сортировка сохранилась.
Спасибо всем за участие и помощь в проблеме.
Back to top
View user's profile Send private message
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Wed Jul 21, 2010 9:08 pm (спустя 2 дня 16 часов 37 минут)
   Post subject:
Reply with quote


М

Ветка выделена в отдельную тему «мусор»,
расположенную в форуме Мусоропровод (21 Июля 2010, 22:08).
Back to top
View user's profile Send private message
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Thu Jul 22, 2010 9:02 am (спустя 11 часов 53 минуты; написано за 47 секунд)
   Post subject:
Reply with quote

Markus,
ну библиотека-то конечно и правда не причем, но "патч" к библиотеке для Оперы я все таки напишу на днях. (-;
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
Post a reply
Username
Subject
Господа спамеры и оптимизаторы!

Вы можете даже и не пытаться вставлять в текст поста ссылки - они все равно автоматически удаляются (вернее, тэги <a> заменяются на тэги <u>).

Но если не поверите и все же попытаетесь - как только увидите, что все безрезультатно, удалите свой пост, пожалуйста. Модераторы тоже люди, нехорошо, если они погрязнут в тоннах спама.
     

Disable BBCode in this post
Disable Smilies in this post
    HTML is OFF
BBCode is ON
Smilies are ON
You cannot post new topics in this forum. You can reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML